package localhost.mb;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import localhost.ejb.DaoOrcamento;
import localhost.model.Conta;
import localhost.model.Parcelado;
import localhost.view.MessageBean;
import localhost.view.PageTransitionBean;
import localhost.view.ViewParcelado;

@ManagedBean(name = "mbParcelado")
@SessionScoped
public class MbParcelado {

	@EJB
	DaoOrcamento daoOrca;

	private ViewParcelado tela = new ViewParcelado();
	PageTransitionBean pt = new PageTransitionBean();
	MessageBean mb = new MessageBean();
	MetodosComuns mc = new MetodosComuns();
	FacesContext fc = FacesContext.getCurrentInstance();

	Date dataAlteracao = new Date();
	NumberFormat formatoMoeda = NumberFormat.getCurrencyInstance();

	public void novoParcelado() {
		Parcelado parcela = this.tela.getParcelado();
		int contaId = this.tela.getIdContaSelecionado();
		Conta conta = daoOrca.retornaConta(contaId);
		String tipo = this.tela.getTipoSelecionado();
		parcela.setConta(conta);
		parcela.setTipo(tipo);
		
		try {
			daoOrca.salvar(parcela);
			msgRetornoGeral("frmIndex", "Parcela salva com êxito!");
			limparVariaveisTela();
		} catch (Exception e) {
			msgRetornoGeral("frmIndex",
					"Não foi possível realizar ação: Salvar!");
			e.printStackTrace();
		}
		populaListaParcelados();
	}


	public void excluir(Parcelado parcelado) {

		try {
			daoOrca.excluiParcelado(parcelado);
			msgRetornoGeral("frmIndex", "Parcelado excluído com êxito!");
			this.tela.setVisibilidadeButton(false);
			limparVariaveisTela();
		} catch (Exception e) {
			msgRetornoGeral("frmIndex",
					"Não foi possível realizar ação: Excluir!");
			e.printStackTrace();
		}
		populaListaParcelados();

	}

	private void limparVariaveisTela() {
		this.tela.setParcelado(new Parcelado());
		this.tela.setIdContaSelecionado(0);
	}

	public String montaTelaInicial() {
		this.tela.setVisibilidadeButton(false);
		limparVariaveisTela();
		populaListaParcelados();
		populaSelectContas();
		return pt.chamaParcelamento();
	}

	public void montaTelaEditar(Parcelado parcelado) {
		this.tela.setVisibilidadeButton(true);
		this.tela.setParcelado(parcelado);
	}

	public void alteraParcelado() {
		Parcelado parcelado = this.tela.getParcelado();
		int contaId = this.tela.getIdContaSelecionado();
		Conta conta = daoOrca.retornaConta(contaId);
		parcelado.setConta(conta);

		try {
			daoOrca.atualizar(parcelado);
			this.tela.setVisibilidadeButton(false);
			limparVariaveisTela();
			msgRetornoGeral("frmIndex", "Parcelado alterado com êxito!");
		} catch (Exception e) {
			msgRetornoGeral("frmIndex",
					"Não foi possível realizar ação: Alterar!");
			e.printStackTrace();
		}
		populaListaParcelados();

	}

	public void populaListaParcelados() {
		List<Parcelado> parcelas = daoOrca.listaParcelados();
		System.out.println("Total parcelas: " + parcelas.size());
		this.tela.setParcelados(parcelas);
	}

	public void populaSelectContas() {
		List<Conta> contas = daoOrca.listaContas();
		List<SelectItem> selectI = new ArrayList<SelectItem>();
		for (Conta conta : contas) {
			selectI.add(new SelectItem(conta.getId(), conta.getDescricao()));
		}

		System.out.println("Total contas: " + contas.size());
		System.out.println("Total select contas: " + selectI.size());

		this.tela.setSelectContas(selectI);
	}

	public ViewParcelado getTela() {
		return tela;
	}

	public void setTela(ViewParcelado tela) {
		this.tela = tela;
	}

	// ############################ MENSAGENS #############################
	public void msgRetornoGeral(String idComp, String msg) {
		mb.addMessageSemBundle(msg, idComp, FacesMessage.SEVERITY_WARN);
	}

}